<?php

namespace Common\Model;

use Think\Model;

/**
 * 社区与文档的关联模型[非数据库模型：因单个社区对应多份文档]
 */
class BbsDocModel extends Model {

    const ALL = 0;              // 文档状态[正、隐、冻]
    const NORMAL_HIDE = 1;      // 文档状态[正、隐]
    const NORMAL = 2;           // 文档状态[正]

    const BBS_DOC_KEY = 'bbsdoc:';      // 社区文档关系缓存键名，当社区新建文档或文档状态修改时清除缓存

    /**
     * 获取社区所管理的文档的ID列表数组，如：[1,2,3]
     * @param $bid
     * @param int $type 2=>[正],0=>[正、隐、冻],1=>[正、隐]
     * @return array|null
     */
    public static function getBbsDocsId($bid, $type = self::NORMAL){
        $key = self::BBS_DOC_KEY.$bid;
        $result = S($key);
        if (!$result && $result = M('Doc')->where(['bid' => $bid])->field('id,status')->select()) {
            S($key, $result);
        }
        if($result){
            $arr = [];
            if ($type == 1) {
                foreach($result as $v){
                    $arr[] = $v['id'];
                }
            }else if ($type == 0) {
                foreach($result as $v){
                    if($v['status'] == DocModel::NORMAL){
                        $arr[] = $v['id'];
                    }
                }
            } else if ($type == 2) {
                foreach($result as $v){
                    if($v['status'] != DocModel::DELTEL){
                        $arr[] = $v['id'];
                    }
                }
            }
            return $arr;
        }
        return null;
    }

    /**
     * 获取社区管理的文档详细信息
     * @param $bid
     * @param $p
     * @param int $pcount 为 0 表示所有
     * @param bool $all 为true表示所有状态下的，为false表示处于正常状态下的
     * @return array|null
     */
    public static function getBbsDocsInfo($bid, $p, $pcount = 0, $all = true){
        $allDids = self::getBbsDocsId($bid);
        $dids = $pcount == 0 ? $allDids : array_slice($allDids, ($p - 1) * $pcount, $pcount);
        if(!$dids){
            return null;
        }
        $result = [];
        foreach ($dids as $v) {
            $result[] = DocModel::getDocById($v, $all);
        }
        return $result;
    }

    /**
     * 获取社区管理文档的数量
     * @param      $bid
     * @param int $type 0=>[正],1=>[正、隐、冻],2=>[正、隐]
     * @return int
     */
    public static function getBbsDocsCount($bid, $type = 0){
        $dids = self::getBbsDocsId($bid, $type);
        return $dids ? count($dids) : 0;
    }

    public static function clearCache($bid){
        $key = self::BBS_DOC_KEY.$bid;
        S($key, null);
    }

}